/* eslint-disable array-callback-return,no-undef */
const path = require("path");
const defaultOptions = {
  open: true // 是否开启
};

module.exports = (options = {}, app) => {
  options = Object.assign({}, defaultOptions, options);
  return async (ctx, next) => {
    const token = ctx.cookie("token") || ctx.cookie("adminToken") || "";
    const author = (token && (await ctx.cache(token))) || null;
    ctx.state.author = author;
    let err = null;
    return next()
      .catch(e => {
        err = e; // 这里先将错误保存在一个错误对象上，方便统计出错情况下的执行时间
      })
      .then(() => {
        if (err) return Promise.reject(err); // 如果后续执行逻辑有错误，则将错误返回
      });
  };
};
